/**
 * 健康计划推荐系统
 * 根据用户的性别、年龄、身高、体重和健康目标生成个性化的健康计划和饮食建议
 */

// 计算BMI指数
function calculateBMI(height, weight) {
    // 身高单位是厘米，需要转换为米
    const heightInMeters = height / 100;
    return weight / (heightInMeters * heightInMeters);
}

// 计算基础代谢率(BMR)
function calculateBMR(gender, age, height, weight) {
    if (gender === '男') {
        return 66 + (13.7 * weight) + (5 * height) - (6.8 * age);
    } else {
        return 655 + (9.6 * weight) + (1.8 * height) - (4.7 * age);
    }
}

// 根据BMI和目标确定每日卡路里需求
function calculateDailyCalories(bmr, bmi, goal) {
    let activityFactor = 1.2; // 默认为久坐不动的生活方式

    let calorieAdjustment = 0;
    switch (goal) {
        case '减肥':
            calorieAdjustment = -500; // 每天减少500卡路里
            break;
        case '增肌':
            calorieAdjustment = 300; // 每天增加300卡路里
            break;
        case '增肌减脂':
            // 根据BMI调整
            if (bmi > 25) {
                calorieAdjustment = -200; // 轻微减少卡路里但保持足够蛋白质
            } else {
                calorieAdjustment = 100;
            }
            break;
        case '提高耐力':
            calorieAdjustment = 200;
            break;
        default: // 保持健康或其他
            calorieAdjustment = 0;
    }

    return Math.round(bmr * activityFactor + calorieAdjustment);
}

// 运动计划库
const exercisePlans = {
    '减肥': [
        {
            name: '有氧减脂计划',
            description: '以有氧运动为主，辅以轻量力量训练，帮助燃烧脂肪',
            duration: '8周',
            schedule: [
                { day: '周一', activities: ['30分钟快走/慢跑', '15分钟核心训练'] },
                { day: '周二', activities: ['45分钟骑行或椭圆机', '15分钟上肢力量训练'] },
                { day: '周三', activities: ['休息日或30分钟轻度瑜伽'] },
                { day: '周四', activities: ['30分钟间歇跑', '15分钟下肢力量训练'] },
                { day: '周五', activities: ['45分钟游泳或有氧舞蹈'] },
                { day: '周六', activities: ['60分钟户外徒步'] },
                { day: '周日', activities: ['完全休息'] }
            ]
        },
        {
            name: 'HIIT减脂计划',
            description: '高强度间歇训练，在短时间内最大化燃脂效果',
            duration: '6周',
            schedule: [
                { day: '周一', activities: ['20分钟HIIT训练', '10分钟拉伸'] },
                { day: '周二', activities: ['30分钟中等强度有氧', '15分钟核心训练'] },
                { day: '周三', activities: ['休息日或轻度活动'] },
                { day: '周四', activities: ['20分钟HIIT训练', '10分钟拉伸'] },
                { day: '周五', activities: ['30分钟全身力量训练'] },
                { day: '周六', activities: ['45-60分钟低强度有氧'] },
                { day: '周日', activities: ['完全休息'] }
            ]
        }
    ],
    '增肌': [
        {
            name: '基础增肌计划',
            description: '以复合动作为主的力量训练，促进肌肉生长',
            duration: '12周',
            schedule: [
                { day: '周一', activities: ['45分钟上肢训练(胸、肩、三头肌)', '15分钟拉伸'] },
                { day: '周二', activities: ['45分钟下肢训练(股四头肌、腿后肌、小腿)', '15分钟核心'] },
                { day: '周三', activities: ['休息日或20分钟轻度有氧'] },
                { day: '周四', activities: ['45分钟背部和二头肌训练', '15分钟拉伸'] },
                { day: '周五', activities: ['45分钟全身训练', '15分钟核心'] },
                { day: '周六', activities: ['30分钟中等强度有氧'] },
                { day: '周日', activities: ['完全休息'] }
            ]
        },
        {
            name: '高级增肌计划',
            description: '分化训练法，针对不同肌群进行专项训练',
            duration: '10周',
            schedule: [
                { day: '周一', activities: ['60分钟胸部和三头肌训练'] },
                { day: '周二', activities: ['60分钟背部和二头肌训练'] },
                { day: '周三', activities: ['45分钟肩部和腹肌训练'] },
                { day: '周四', activities: ['休息日'] },
                { day: '周五', activities: ['60分钟腿部训练'] },
                { day: '周六', activities: ['45分钟弱项肌群加强训练'] },
                { day: '周日', activities: ['完全休息'] }
            ]
        }
    ],
    '增肌减脂': [
        {
            name: '增肌减脂复合计划',
            description: '结合力量训练和有氧运动，同时促进肌肉生长和脂肪燃烧',
            duration: '10周',
            schedule: [
                { day: '周一', activities: ['40分钟上肢力量训练', '20分钟HIIT'] },
                { day: '周二', activities: ['40分钟下肢力量训练', '20分钟中等强度有氧'] },
                { day: '周三', activities: ['休息日或30分钟瑜伽'] },
                { day: '周四', activities: ['40分钟全身力量训练', '20分钟HIIT'] },
                { day: '周五', activities: ['45分钟核心和弱项训练', '15分钟拉伸'] },
                { day: '周六', activities: ['60分钟中低强度有氧或户外活动'] },
                { day: '周日', activities: ['完全休息'] }
            ]
        }
    ],
    '保持健康': [
        {
            name: '健康维持计划',
            description: '平衡的运动计划，保持身体健康和基本体能',
            duration: '持续进行',
            schedule: [
                { day: '周一', activities: ['30分钟力量训练', '15分钟拉伸'] },
                { day: '周二', activities: ['30-45分钟有氧运动(快走、慢跑、骑行等)'] },
                { day: '周三', activities: ['休息日或轻度活动'] },
                { day: '周四', activities: ['30分钟全身力量训练'] },
                { day: '周五', activities: ['30-45分钟有氧运动'] },
                { day: '周六', activities: ['45-60分钟户外活动或喜欢的运动'] },
                { day: '周日', activities: ['休息日或15-20分钟拉伸/瑜伽'] }
            ]
        }
    ],
    '提高耐力': [
        {
            name: '耐力提升计划',
            description: '渐进式增加有氧运动时间和强度，提高心肺功能',
            duration: '12周',
            schedule: [
                { day: '周一', activities: ['30-45分钟中等强度有氧', '15分钟核心训练'] },
                { day: '周二', activities: ['30分钟间歇训练'] },
                { day: '周三', activities: ['60分钟低强度持续有氧'] },
                { day: '周四', activities: ['休息日或轻度活动'] },
                { day: '周五', activities: ['45分钟节奏跑或骑行'] },
                { day: '周六', activities: ['75-90分钟长距离低强度有氧'] },
                { day: '周日', activities: ['30分钟恢复性活动(散步、游泳等)'] }
            ]
        }
    ],
    '其他': [
        {
            name: '基础健身计划',
            description: '全面的健身计划，适合大多数健康目标',
            duration: '8周',
            schedule: [
                { day: '周一', activities: ['30分钟全身力量训练', '20分钟有氧'] },
                { day: '周二', activities: ['45分钟有氧运动'] },
                { day: '周三', activities: ['30分钟瑜伽或普拉提'] },
                { day: '周四', activities: ['30分钟全身力量训练', '20分钟有氧'] },
                { day: '周五', activities: ['45分钟有氧运动'] },
                { day: '周六', activities: ['60分钟户外活动或喜欢的运动'] },
                { day: '周日', activities: ['完全休息'] }
            ]
        }
    ]
};

// 饮食计划库
const dietPlans = {
    '减肥': [
        {
            name: '健康减脂饮食',
            description: '控制热量摄入，保证营养均衡，促进脂肪燃烧',
            principles: [
                '控制总热量在每日需求的80-85%',
                '增加蛋白质摄入，每公斤体重1.6-2.0克',
                '减少精制碳水化合物和添加糖',
                '增加膳食纤维摄入',
                '保持充分水分摄入，每天至少2升水'
            ],
            mealPlan: {
                breakfast: ['高纤维谷物配低脂牛奶/豆浆', '鸡蛋白或全蛋', '少量水果'],
                lunch: ['瘦肉/鱼/豆制品(掌心大小)', '大量非淀粉类蔬菜', '少量全谷物'],
                dinner: ['瘦肉/鱼/豆制品', '大量蔬菜', '少量健康脂肪(坚果、橄榄油等)'],
                snacks: ['蛋白质奶昔', '少量坚果', '酸奶', '水果']
            }
        }
    ],
    '增肌': [
        {
            name: '增肌饮食计划',
            description: '适量增加热量摄入，高蛋白饮食支持肌肉生长',
            principles: [
                '总热量比维持体重需要高300-500卡',
                '高蛋白质摄入，每公斤体重1.8-2.2克',
                '适量优质碳水化合物，尤其是训练前后',
                '适量健康脂肪',
                '分次进食，每天4-6餐'
            ],
            mealPlan: {
                breakfast: ['燕麦片配高蛋白牛奶和水果', '全蛋2-3个', '全麦面包'],
                lunch: ['大份瘦肉/鱼/禽类', '糙米/红薯/全麦面食', '蔬菜'],
                dinner: ['大份瘦肉/鱼/禽类', '糙米/红薯/全麦面食', '蔬菜', '健康脂肪来源'],
                snacks: ['蛋白质奶昔', '希腊酸奶配坚果和水果', '全麦三明治', '蛋白棒']
            }
        }
    ],
    '增肌减脂': [
        {
            name: '增肌减脂平衡饮食',
            description: '精确控制营养摄入，同时支持肌肉生长和脂肪减少',
            principles: [
                '总热量略低于或等于维持体重所需',
                '高蛋白质摄入，每公斤体重2.0-2.4克',
                '适量优质碳水化合物，主要集中在训练前后',
                '控制但不过度限制脂肪摄入',
                '训练日和非训练日的饮食略有区别'
            ],
            mealPlan: {
                breakfast: ['蛋白质来源(蛋白粉/鸡蛋/希腊酸奶)', '燕麦/全麦面包', '少量水果'],
                lunch: ['大份瘦肉/鱼/禽类', '适量糙米/红薯(训练日增加)', '大量蔬菜'],
                dinner: ['大份瘦肉/鱼/禽类', '适量糙米/红薯(训练日)', '大量蔬菜', '少量健康脂肪'],
                snacks: ['蛋白质奶昔', '少量坚果', '蛋白棒', '酸奶']
            }
        }
    ],
    '保持健康': [
        {
            name: '均衡健康饮食',
            description: '遵循均衡饮食原则，摄入多样化食物',
            principles: [
                '摄入多样化食物，保证营养均衡',
                '控制加工食品摄入',
                '增加蔬果摄入，每天至少5份',
                '选择全谷物而非精制谷物',
                '适量摄入健康脂肪'
            ],
            mealPlan: {
                breakfast: ['全谷物早餐', '蛋白质来源', '水果'],
                lunch: ['瘦肉/鱼/豆制品', '全谷物', '蔬菜', '少量健康脂肪'],
                dinner: ['瘦肉/鱼/豆制品', '全谷物/薯类', '大量蔬菜'],
                snacks: ['水果', '坚果', '酸奶', '全谷物点心']
            }
        }
    ],
    '提高耐力': [
        {
            name: '耐力运动饮食',
            description: '支持长时间有氧运动的能量需求和恢复',
            principles: [
                '适当增加碳水化合物摄入，尤其是训练前后',
                '中等蛋白质摄入，每公斤体重1.4-1.6克',
                '训练前、中、后的营养补充策略',
                '注重补充电解质和水分',
                '根据训练强度调整总热量'
            ],
            mealPlan: {
                breakfast: ['燕麦/全谷物', '香蕉或其他水果', '蛋白质来源'],
                lunch: ['全谷物面食/米饭/土豆', '瘦肉/鱼/豆制品', '蔬菜', '水果'],
                dinner: ['瘦肉/鱼/豆制品', '全谷物/薯类', '蔬菜', '健康脂肪'],
                snacks: ['能量棒', '水果', '全麦三明治', '运动饮料(长时间训练时)']
            }
        }
    ],
    '其他': [
        {
            name: '基础健康饮食',
            description: '适合大多数人的健康饮食模式',
            principles: [
                '控制总热量在合理范围内',
                '均衡摄入各类营养素',
                '限制加工食品、添加糖和不健康脂肪',
                '增加蔬果和膳食纤维摄入',
                '保持充分水分摄入'
            ],
            mealPlan: {
                breakfast: ['全谷物', '蛋白质来源', '水果'],
                lunch: ['瘦肉/鱼/豆制品', '全谷物/薯类', '蔬菜'],
                dinner: ['瘦肉/鱼/豆制品', '全谷物/薯类', '大量蔬菜'],
                snacks: ['水果', '坚果', '酸奶', '全谷物点心']
            }
        }
    ]
};

// 生成健康计划推荐
function generateHealthPlanRecommendations(gender, age, height, weight, goal) {
    // 计算BMI和BMR
    const bmi = calculateBMI(height, weight);
    const bmr = calculateBMR(gender, age, height, weight);
    const dailyCalories = calculateDailyCalories(bmr, bmi, goal);

    // 获取适合目标的运动计划
    const suitableExercisePlans = exercisePlans[goal] || exercisePlans['其他'];

    // 获取适合目标的饮食计划
    const suitableDietPlans = dietPlans[goal] || dietPlans['其他'];

    // 根据BMI调整推荐
    let bmiCategory = '';
    let bmiAdvice = '';

    if (bmi < 18.5) {
        bmiCategory = '体重过轻';
        bmiAdvice = '建议增加健康的体重，注重增加瘦肌肉而非脂肪。';
    } else if (bmi >= 18.5 && bmi < 24) {
        bmiCategory = '体重正常';
        bmiAdvice = '您的BMI在健康范围内，继续保持健康的生活方式。';
    } else if (bmi >= 24 && bmi < 28) {
        bmiCategory = '超重';
        bmiAdvice = '建议适当减少体重，关注健康饮食和规律运动。';
    } else {
        bmiCategory = '肥胖';
        bmiAdvice = '建议在医生指导下减重，采用健康的饮食和运动方式。';
    }

    return {
        userStats: {
            gender: gender,
            age: age,
            height: height,
            weight: weight,
            bmi: bmi.toFixed(1),
            bmiCategory: bmiCategory,
            bmr: Math.round(bmr),
            dailyCalories: dailyCalories
        },
        bmiAdvice: bmiAdvice,
        exercisePlans: suitableExercisePlans,
        dietPlans: suitableDietPlans
    };
}

// 导出函数供其他JS文件使用
window.healthPlanRecommender = {
    generateHealthPlanRecommendations: generateHealthPlanRecommendations
};